package it.azienda.managerworkstandard.view;

import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.framework.utilita.Utilita;
import it.azienda.framework.view.Dettaglio;
import it.azienda.managerworkstandard.modello.BeanConfigurazione;
import it.azienda.managerworkstandard.modello.BeanComune;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlInputText;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import org.apache.myfaces.custom.fileupload.HtmlFileUploadRenderer;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DettaglioConfigurazione extends Dettaglio{
    
    private HtmlForm form = new HtmlForm();
    private BeanConfigurazione beanConfigurazione;
    
    public void setBeanConfigurazione(BeanConfigurazione beanConfigurazione) {
        setObj(beanConfigurazione);
        this.beanConfigurazione = beanConfigurazione;
    }
    
    public BeanConfigurazione getBeanConfigurazione(){
        return (BeanConfigurazione)getObj();
    }
    
    public HtmlForm getForm() {
        form = (HtmlForm) Utilita.getSession().getAttribute("form");
        if (form == null) {
            form = new HtmlForm();
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanConfigurazione =(BeanConfigurazione) ctx.getExternalContext().getRequestMap().get("beanConfigurazione");
        controlloDopoSalvataggio(beanConfigurazione);
        Utilita.getSession().removeAttribute("form");
        return form;
    }
    
    public void setForm(HtmlForm form) {
        setFormObject(form);
        this.form = form;
        Utilita.getSession().setAttribute("form",form);
    }
    
    public void lookUp(ValueChangeEvent event) {
        if(event.getOldValue() != null && event.getNewValue()!=null ){
            if(!event.getOldValue().toString().toUpperCase().equals(event.getNewValue().toString().toUpperCase())){
                if(event.getNewValue().toString().length()>=1 ){
                    
                    FacesContext ctx = FacesContext.getCurrentInstance();
                    beanConfigurazione =(BeanConfigurazione) ctx.getExternalContext().getRequestMap().get("beanConfigurazione");
                    setObj(beanConfigurazione);
                    String descrizioneComune=new String(""+event.getNewValue());
                    
                    String nomeBean=(String)event.getComponent().getAttributes().get("nomeBean");
                    String nomeBeanLookUp =(String)event.getComponent().getAttributes().get("nomeBeanLookUp");
                    
                    if(nomeBean.equals("beanComuneResidenza")){
                        BeanComune beanComune=(BeanComune)lookUpRapido(descrizioneComune.toUpperCase(),nomeBeanLookUp);
                        if (beanComune == null) {
                            ((HtmlInputText) form.findComponent("descrizioneComune_Residenza")).setSubmittedValue(null);
                            ((HtmlInputText) form.findComponent("cap_Residenza")).setSubmittedValue(null);
                            beanConfigurazione.setBeanComuneResidenza(new BeanComune());
                            setObj(beanConfigurazione);
                            HtmlForm form = (HtmlForm)ctx.getViewRoot().findComponent("erroriDataBase");
                            form.setRendered(true);
                            ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase","Comune inesistente"));
                        }else{
                            beanConfigurazione.setBeanComuneResidenza(beanComune);
                            setObj(beanConfigurazione);
                            ((HtmlInputText) form.findComponent("descrizioneComune_Residenza")).setSubmittedValue(beanComune.getDescrizione());
                            ((HtmlInputText) form.findComponent("cap_Residenza")).setSubmittedValue(beanComune.getCap().toString());
                        }
                    }
                    ctx.renderResponse();
                }
            }
        }
    }
    
    public void caricaImage(ValueChangeEvent event)  {
        if(event.getNewValue()!=null){
            FacesContext ctx = FacesContext.getCurrentInstance();
            UploadedFile uploadedFile = (UploadedFile) event.getNewValue();
            beanConfigurazione.setMyUploadedFile(uploadedFile);
            setObj(beanConfigurazione);
            ctx.renderResponse();
        }
    }
    
    
    public boolean controlliPrimaSalvataggio() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanConfigurazione =(BeanConfigurazione) ctx.getExternalContext().getRequestMap().get("beanConfigurazione");
     
        boolean errori = false;
        if(beanConfigurazione.getBeanComuneResidenza().getId() == null) {
            HtmlForm form = (HtmlForm)ctx.getViewRoot().findComponent("erroriDataBase");
            form.setRendered(true);
            ctx.addMessage("erroriDataBase", new FacesMessage("Attenzione: Comune obbligatorio!"));
            errori = true;
        }
        
        if(errori) {
            controlloDopoSalvataggio(beanConfigurazione);
            return true;
        }
        return false;
    }
    
    public void controlloDopoSalvataggio(Object obj) {
        BeanConfigurazione configurazione=(BeanConfigurazione)obj;
        if(configurazione.getBeanComuneResidenza()==null){
            configurazione.setBeanComuneResidenza(new BeanComune());
        }
    }
    
    public void primaInserimento(Object obj) {
        String query=" select max(configurazione.codice) from BeanConfigurazione configurazione";
        Session session = null;
        Transaction tr = null;
        try {
            session = DAOConnectionSingleton.newSession();
            tr = session.beginTransaction();
            Query q = null;
            q = session.createQuery(query);
            ArrayList listaCodice = (ArrayList) q.list();
            Integer cod=(Integer) listaCodice.get(0);
            if(cod!=null){
                this.beanConfigurazione.setCodice(new Integer(cod.intValue()+1));
            }else{
                this.beanConfigurazione.setCodice(new Integer(1));
            }
        } catch (Exception e) {
        }
    }
}
